'use strict';
var vk; // 全局vk实例
// 涉及的表名
const dbName = {
	//test: "vk-test", // 测试表
};

var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
/**
 * 权限注意：访问以下链接查看
 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#内置权限
 */
var cloudObject = {
	isCloudObject: true, // 标记为云对象模式
	/**
	 * 请求前处理，主要用于调用方法之前进行预处理，一般用于拦截器、统一的身份验证、参数校验、定义全局对象等。
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#before-预处理
	 */
	_before: async function() {
		vk = this.vk; // 将vk定义为全局对象
		// let { customUtil, uniID, config, pubFun } = this.getUtil(); // 获取工具包
	},
	/**
	 * 请求后处理，主要用于处理本次调用方法的返回结果或者抛出的错误
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#after-后处理
	 */
	_after: async function(options) {
		let { err, res } = options;
		if (err) {
			return; // 如果方法抛出错误，直接return;不处理
		}
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getstdentinfo 前端调用的url参数地址
	 */
	getstdentinfo: async function(data) {
		let res = { code: 0, msg: '' };
		//res.userInfo = await this.getUserInfo();

		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.xsinfo = await vk.baseDao.findById({
		  dbName:"jwc-xsxxgl-obj",
		  id:data._id
		});

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 修改学生对教师评测
	 * @url client/gsxy/jwc/pub/jwcapi.updateJslhpjb 前端调用的url参数地址
	 */
	updateJslhpjb: async function(data) {
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		let updateId = data._id
		Reflect.deleteProperty(data,'_id')
		// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
		//let register_date = new Date().getTime();
		await vk.baseDao.updateById({
		  dbName:"jwc-jslhpjb-obj",
		  id:updateId,
		  dataJson:{
		   ...data
		  }
		});
		
		res.jslhpjblist = await vk.baseDao.select({
		  dbName:'jwc-jslhpjb-obj',
		  getCount:true,
		  getMain:true,
		  pageIndex:1,
		  pageSize:-1,
		  whereJson:{
		    xq:data.xq,
			bjmc:data.bjmc
		  },

		});
		let jslhpjblistlet = res.jslhpjblist//所有学生
		
		res.fhsj = vk.myfn.uniqueArrayjs(jslhpjblistlet)
		let fhsj = res.fhsj//所有教师
		for (let i = 0; i < fhsj.length; i++) {
			fhsj[i].ystemp =0
			for (let a = 0; a < jslhpjblistlet.length; a++) {
				if(fhsj[i].jsbh == jslhpjblistlet[a].jsbh && jslhpjblistlet[a].sum >= 85){
					fhsj[i].ystemp +=1
				}
			}
		}
		//获取学生人数
		for (let i = 0; i < fhsj.length; i++) {
			fhsj[i].xsrs =0
			for (let a = 0; a < jslhpjblistlet.length; a++) {
				if(fhsj[i].jsbh == jslhpjblistlet[a].jsbh){
					fhsj[i].xsrs +=1
				}
			}
		}
		//获取优率
		for (let i = 0; i < fhsj.length; i++) {
			fhsj[i].scores = 0
			for (let a = 0; a < jslhpjblistlet.length; a++) {
				if(fhsj[i].jsbh == jslhpjblistlet[a].jsbh){
					fhsj[i].scores = (fhsj[i].ystemp/fhsj[i].xsrs)
					//fhsj[i].scores =parseFloat((fhsj[i].ystemp/fhsj[i].xsrs).toFixed(5))
				}
			}
		}
		res.ylfs = vk.myfn.aaaa1(fhsj)

		res.ylpms = 0
		for (let i = 0; i < res.ylfs.length; i++) {
			if(fhsj[i].jsbh == res.ylfs[i].jsbh){
				//fhsj[i].ylpms = parseFloat((res.ylfs[i].gys/res.ylfs.length).toFixed(5))
				fhsj[i].ylpms = (res.ylfs[i].gys/res.ylfs.length)
				fhsj[i].ystemp =res.ylfs[i].ystemp
				fhsj[i].cjsr =res.ylfs[i].cjsr
				fhsj[i].gys =res.ylfs[i].gys
			}
		}

		let newArraya = fhsj.map(obj => {  
			delete obj.xm
			delete obj.zjhm
			delete obj._add_time
			delete obj._add_time_str
			delete obj._id
			delete obj.sum
		    return obj
		});  
		res.newArraya =newArraya

		let infoddd;
		for (let i = 0; i < newArraya.length; i++) {
	
			let infoddd = await vk.baseDao.findByWhereJson({
			  dbName:"jwc-jslhpjb-qx-obj",
			  whereJson:{
			    bjid: newArraya[i].bjid,
				jsbh: newArraya[i].jsbh,
				xq: newArraya[i].xq
			  }
			});

			if(infoddd && infoddd._id){
				let newInfo = await vk.baseDao.updateById({
				  dbName:"jwc-jslhpjb-qx-obj",
				  id:infoddd._id,
				  dataJson:{
					bjid: newArraya[i].bjid,
					bjmc: newArraya[i].bjmc,
					cjsr: newArraya[i].cjsr,
					count: newArraya[i].count,
					gys: newArraya[i].gys,
					jsbh: newArraya[i].jsbh,
					jsxm: newArraya[i].jsxm,
					pmcj: newArraya[i].pmcj,
					scores: newArraya[i].scores,
					xq: newArraya[i].xq,
					xsrs: newArraya[i].xsrs,
					ylpms: newArraya[i].ylpms,
					ystemp: newArraya[i].ystemp
				  }
				});
			}else{
				await vk.baseDao.add({
				  dbName:"jwc-jslhpjb-qx-obj",
				  dataJson:{
				    bjid: newArraya[i].bjid,
				    bjmc: newArraya[i].bjmc,
				    cjsr: newArraya[i].cjsr,
				    count: newArraya[i].count,
				    gys: newArraya[i].gys,
				    jsbh: newArraya[i].jsbh,
				    jsxm: newArraya[i].jsxm,
				    pmcj: newArraya[i].pmcj,
				    scores: newArraya[i].scores,
				    xq: newArraya[i].xq,
				    xsrs: newArraya[i].xsrs,
				    ylpms: newArraya[i].ylpms,
				    ystemp: newArraya[i].ystemp
				  }
				});
			}


		}

		return res;
	},
	/**
	 * 小程序端通过学生身份证获取班级任课教师
	 * @url client/gsxy/jwc/pub/jwcapi.getjscpbysxzjhm 前端调用的url参数地址
	 */
	getjscpbysxzjhm: async function(data) {
		let res = { code: 0, msg: '' };
		let {zjhm} =data
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.jslist = await vk.baseDao.select({
		  dbName:"jwc-jslhpjb-obj", // 表名
		  getCount:true, // 是否需要同时查询满足条件的记录总数量，默认false
		  getMain:true, // 是否只返回rows数据，默认false
		  pageIndex:1, // 当前第几页
		  pageSize:-1, // 每页条数
		  whereJson:{ // 条件
		    zjhm:zjhm  // 金额大于0
		  },
		  // 代表只显示_id和money字段
		  fieldJson:{

		  },
		  // 按_id降序 asc 升序 desc 降序 
		  sortArr:[

		  ],
		});
		
		
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getbjinfo 前端调用的url参数地址
	 */
	getbjinfo: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.info = await vk.baseDao.findById({
		  dbName:"jwc-bjgl",
		  id:data.bjid
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.addxsxxgl 前端调用的url参数地址
	 */
	addxsxxgl: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
	
	
		res.xsxxglsjb = await vk.baseDao.findByWhereJson({
		  dbName:"jwc-xsxxgl-sjb-obj",
		  whereJson:{
			xm:data.xm,
			zjhm:data.sfzh
		  }
		});
	
		if(res.xsxxglsjb &&res.xsxxglsjb.jrzt == '0'){
			const info = await vk.baseDao.findByWhereJson({
			  dbName:"jwc-xsxxgl-obj",
			  whereJson:{
			    sfzh:data.sfzh,
			  }
			});
			
			if(info && info.sfzh){
				await vk.baseDao.update({
				  dbName:"jwc-xsxxgl-obj",
				  whereJson:{
					  sfzh:info.sfzh
				 },
				  dataJson:{
					  xm:data.xm,
					  bjinfo:data.bjinfo,
					  wxinfo:data.wxinfo
				  }
				});
			}else{
				await vk.baseDao.add({dbName:"jwc-xsxxgl-obj",dataJson:{...data }});
			}
			await vk.baseDao.update({
			  dbName:"jwc-xsxxgl-sjb-obj",
			  whereJson:{zjhm:data.sfzh},dataJson:{jrzt:'1',bjid:data.bjinfo._id}
			});
		}else if(res.xsxxglsjb &&res.xsxxglsjb.jrzt == '1'){
			return res = { code: -1, msg: '学生数据已经接入系统如果换班,请联系教务处' };
		}else{
			return res = { code: -2, msg: '学生数据不存在' };
		}
	
	

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getwxewm 前端调用的url参数地址
	 */
	getwxewm: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		
		res.getUnlimitedRes = await vk.openapi.weixin.wxacode.getUnlimited({
		  page: "pages_modules/jwc/xswxzc",
		  width:200,
		  scene: data.bjid,
		  check_path: false,
		  env_version: "release", // 要打开的小程序版本。正式版为 "release"，体验版为 "trial"，开发版为 "develop"。默认是正式版。
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getxsxx 前端调用的url参数地址
	 */
	getxsxx: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.xsinfo = await vk.baseDao.findByWhereJson({
		  dbName:"jwc-xscj-obj",
		  whereJson:{
		    sfzh:data.sfzh
		  }
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getfdyxx 前端调用的url参数地址
	 */
	getfdyxx: async function(data) {
		let res = { code: 0, msg: '' };
		let userInfo = await this.getUserInfo(); // 获取当前登录的用户信息
		let {username,wxinfo} = data;
		// 业务逻辑开始-----------------------------------------------------------
		
		//1.查询后端用户信息
		res.hdinfo = await vk.baseDao.findByWhereJson({
		  dbName:"uni-id-users",
		  whereJson:{
			username:username,
		  },
		  fieldJson:{
		    username: true,role: true, 
			comment: true,gender: true,
			mobile: true,nickname: true,
			jrzt:true
		  },
		});
		if(res.hdinfo && res.hdinfo.username){}else{return res = { code: -1, msg: '该账号不存在' };}

		//判断接入状态，判断是否已经被占用
		// if(res.hdinfo.wxinfo && res.hdinfo.wxinfo._id){
		// 	if(wxinfo._id == res.hdinfo.wxinfo._id){
				
		// 	}else{
		// 		return res = { code: -1, msg: '该账号已经被接入' };
		// 	}
		// }else{

		// }

		//2.将微信信息保存到后台用户
		await vk.baseDao.update({
		  dbName:"uni-id-users", // 表名
		  whereJson:{ // 条件
		    username:username
		  },
		  dataJson:{ // 需要修改的数据
		    wxinfo:wxinfo,
			jrzt:'1'
		  }
		});
		//3.将保存后台的username保存到微信的lmid
		await vk.baseDao.updateById({
		  dbName:"uni-id-users",
		  id:wxinfo._id,
		  dataJson:{
			lmid:username
		  }
		});

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getvkGlobalDataByid 前端调用的url参数地址
	 */
	getvkGlobalDataByid: async function(data) {
		let res = { code: 0, msg: '' };
		let {byid} = data;
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
			//vk-global-data
			res.info = await vk.baseDao.findById({
			  dbName:"vk-global-data",
			  id:byid
			});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getvkGlobalData 前端调用的url参数地址
	 */
	getvkGlobalData: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
			//vk-global-data
			res.info = await vk.baseDao.findById({
			  dbName:"vk-global-data",
			  id:"653b186b99c624880034e20c"
			});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url client/gsxy/jwc/pub/jwcapi.getList 前端调用的url参数地址
	 */
	getList: async function(data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		
	
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url client/gsxy/jwc/pub/jwcapi.getXsKsCj 前端调用的url参数地址
	 */
	getXsKsCj: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.data = await vk.baseDao.select({
		  dbName:"jwc-xscj-obj", // 表名
		  getCount:true, // 是否需要同时查询满足条件的记录总数量，默认false
		  getMain:true, // 是否只返回rows数据，默认false
		  pageIndex:1, // 当前第几页
		  pageSize:-1, // 每页条数
		  whereJson:{ // 条件
		    sfzh:data.sfzh  // 金额大于0
		  },
		  // 代表只显示_id和money字段
		  fieldJson:{
		    kq: true,xy: true, 
			zy: true,xy: true,
			bj: true,xy: true,
			xm: true,xh: true,
			km: true,cj: true,
			mfcj: true,bz: true,bkcj: true
		  },
		  // 按_id降序 asc 升序 desc 降序 
		  sortArr:[
		    { name:"_add_time", type:"desc" }
		  ],
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url client/gsxy/jwc/pub/jwcapi.getbjlist 前端调用的url参数地址
	 */
	getbjlist: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res.data = await vk.baseDao.select({
		  dbName:"jwc-bjgl", // 表名
		  getCount:true, // 是否需要同时查询满足条件的记录总数量，默认false
		  getMain:true, // 是否只返回rows数据，默认false
		  pageIndex:1, // 当前第几页
		  pageSize:-1, // 每页条数
		  whereJson:{ // 条件
		    userid:data.sfzh  // 金额大于0
		  },
		  // 代表只显示_id和money字段
		  fieldJson:{
			  
		  },
		  // 按_id降序 asc 升序 desc 降序 
		  sortArr:[
		    { name:"_add_time", type:"desc" }
		  ],
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
};

module.exports = cloudObject;
